//Header File for a Groovey Transformer Class

#ifndef G_TRANSFORMER
#define G_TRANSFORMER

#include <boost/numeric/ublas/vector.hpp>
#include "gparticle.hpp"

class GTransformer{ ////more than meets the eye....
    public:
    	GTransformer();
    	
    	GTransformer(const boost::numeric::ublas::vector<float> Manip);
    	
    	///pre: Make sure the particles you feed this guy are well formed up and ready to be transformed. 
    	//////Okay, dude?
    	
    	void operator()(GParticle& GPart) const; 								   ///result: The particle's acceleration 
    																	   //////and other properties are changed.
    				///NOTE! This does not mean we are done... the particle will likely need updating 
    				///////unless you know what you're doing.
    				
    	void defineManip(const boost::numeric::ublas::vector<float> Manip);///result: Defines or redefines 
    																	   //////the current manipulation vector
    	
    	///pre: this should already have a manipulation defined before calling getManip()
    	boost::numeric::ublas::vector<float>& getManip();						   ///result: Toss out this->manip
    	
    //////
	//////Privates:
	//////
    private:
    	boost::numeric::ublas::vector<float> manip;
};

#endif
